package fr.p9.miage.projetReseau.jeux.ppc.serveur;

import fr.p9.miage.projetReseau.arbitre.Joueur;
import fr.p9.miage.projetReseau.arbitre.MessageArbitre;
import fr.p9.miage.projetReseau.communication.serveur.ConvertisseurServeurJeu;


public abstract class PPCMessageArbitre implements MessageArbitre {

	public static final int GAGNANT = 1;
	public static final int PERDANT = 2;
	public static final int NUL = 3;
	public static final int PARTIE_GAGNANTE = 4;
	public static final int PARTIE_PERDANTE = 5;
	public static final int MATCH_NUL = 6;
	public static final int AUTRE_CHOIX = 7;

	
	private final Joueur joueur;

	/**
	 * @param joueur
	 *            
	 */

	private PPCMessageArbitre(Joueur joueur) {
		this.joueur = joueur;
	}

	@Override
	public Joueur getJoueur() {
		return joueur;
	}

	/**
	 * @author eee
	 *
	 */
	public static class PPCMessageVictoire extends PPCMessageArbitre {

		public PPCMessageVictoire(Joueur joueur) {
			super(joueur);
		}

		@Override
		public byte[] convertir(ConvertisseurServeurJeu convertisseur) {
			return ((PPCConvertisseurServeurJeu) convertisseur)
					.messageArbitreToByteBuffer(this);
		}

	}

	public static class PPCMessageDefaite extends PPCMessageArbitre {

		public PPCMessageDefaite(Joueur joueur) {
			super(joueur);
		}

		@Override
		public byte[] convertir(ConvertisseurServeurJeu convertisseur) {
			return ((PPCConvertisseurServeurJeu) convertisseur)
					.messageArbitreToByteBuffer(this);
		}
	}


	public static class PPCMessageVictoirePartie extends PPCMessageArbitre {


		public PPCMessageVictoirePartie(Joueur joueur) {
			super(joueur);
		}

		@Override
		public byte[] convertir(ConvertisseurServeurJeu convertisseur) {
			return ((PPCConvertisseurServeurJeu) convertisseur)
					.arbiterMessageToByteBuffer(this);
		}
	}


	public static class PPCMessagePartiePerdue extends PPCMessageArbitre {

		public PPCMessagePartiePerdue(Joueur joueur) {
			super(joueur);
		}

		@Override
		public byte[] convertir(ConvertisseurServeurJeu convertisseur) {
			return ((PPCConvertisseurServeurJeu) convertisseur)
					.arbiterMessageToByteBuffer(this);
		}
	}

	public static class PPCMessageMatchNul extends PPCMessageArbitre {

		public PPCMessageMatchNul(Joueur joueur) {
			super(joueur);
		}

		@Override
		public byte[] convertir(ConvertisseurServeurJeu convertisseur) {
			return ((PPCConvertisseurServeurJeu) convertisseur)
					.messageArbitreToByteBuffer(this);
		}
	}

	public static class PPCMessageNul extends PPCMessageArbitre {
		public PPCMessageNul(Joueur joueur) {
			super(joueur);
		}

		@Override
		public byte[] convertir(ConvertisseurServeurJeu convertisseur) {
			return ((PPCConvertisseurServeurJeu) convertisseur)
					.messageArbitreToByteBuffer(this);
		}
	}

	public static class PPCMessageAutreChoix extends PPCMessageArbitre {

		private final PPCElement element;

		public PPCMessageAutreChoix(Joueur joueur, PPCElement element) {
			super(joueur);
			this.element = element;
		}

		public PPCElement getElement() {
			return element;
		}

		@Override
		public byte[] convertir(ConvertisseurServeurJeu convertisseur) {
			return ((PPCConvertisseurServeurJeu) convertisseur)
					.arbiterMessageToByteBuffer(this);
		}
	}
}